package com.squirrel.michale.search1;


/**
 * @author guanhao 观浩
 * @version 1.0.0.0
 * @createTime 2023/1/18 12:15 PM
 * @company Michale Squirrel
 * @link
 * @description
 */


/**
 *  认证题目：2021-03-05 整理仓库
 *
 * 管理员需要整理所有货箱，要求如下：
 *
 * 将若干 位置连续 的货箱堆起，从左至右整理成三堆，每一堆至少有一个货箱；
 *
 * 三堆货箱重量满足条件：左边一堆货箱重量 <= 中间一堆货箱重量 <= 右边一堆货箱重量。
 *
 * 请返回管理员共有多少种满足要求的整理方案；如果无可行方案，返回 0。
 *
 * 注意：答案需要以 1e9 + 7 (1000000007) 为底取余，如：计算初始结果为：1000000008，则取余后返回 1。
 *
 *
 *
 * 示例 1：
 *
 * 输入：boxes = [1,1,2,1,4]
 *
 * 输出：5
 *
 * 解释：有五种整理方法：
 *
 * 整理成 [1,1,7]，7 = boxes[2] + boxes[3] + boxes[4] = 2 + 1 + 4，由右侧 3 个货箱堆成一堆；
 *
 * 整理成 [1,3,5]；
 *
 * 整理成 [1,4,4]；
 *
 * 整理成 [2,2,5]；
 *
 * 整理成 [2,3,4]。
 *
 *
 *
 * 限制：
 *
 * 3 <= boxes.length <= 10^6
 *
 * 1 <= boxes[i] <= 10^6
 *
 *
 */
public class ArrangeBoxes {

    public static int arrangeBoxes(int[] boxes) {



        int result = 0;
        for (int i = 0; i < boxes.length - 1; i++) {
            for (int j = i+1; j < boxes.length ; j++) {
                int leftSum = getSum(boxes, 0, i);
                int middleSum = getSum(boxes, i + 1, j);
                int rightSum = getSum(boxes, j + 1, boxes.length-1);
                if (leftSum <= middleSum && middleSum <= rightSum) {
                    result++;
                    System.out.println("left==" + i + "right==" + j);
                }
            }
        }

        return result%(1<<7|7);
    }

    private static int getSum(int[] boxes, int left, int right) {
        int sum = 0;
        for (int i = left; i <= right; i++) {
            sum += boxes[i];
        }
        return sum;
    }

    public static void main(String[] args) {
        int[] boxex = new int[]{ 1,1,2,1,4};
        System.out.println(arrangeBoxes(boxex));
    }

}
